package thinkingInJava.factory;

import thinkingInJava.factory.Car.Road;

public class CarCtrl {
	
	// Car 和  Road 接口使得类似 line1 line2 这样的代码可以得到复用，即这两上方法可以操作所有类型的车和所有公路 
	void line1(Car c, Road r){
		c.drive(r);
		c.Stop();
	};
	
	void line2(Car c, Road r1, Road r2){
		c.drive(r1);
		c.drive(r2);
		c.Stop();
	};
	
	// 工厂类型使得增加或删除某个(从Car或Road派生的)类时，完全不用改其它地方的任何代码，只要增加或删除一个类即可
	public void TestCar(){
		Car car = CarFactory.getCarInstance("CarBMW");
		Road r1 = RoadFactory.getRoadInstance("RoadHill");
		CarCtrl cc = new CarCtrl();
		cc.line1(car, r1);
		
		Road r2 = RoadFactory.getRoadInstance("RoadRace");
		cc.line2(car, r1, r2);
	}
}
